home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / cat3 / librw / RWTValMultiMap.z / RWTValMultiMap
Encoding:
Text File  |  1998-10-30  |  22.2 KB  |  529 lines

  1.  
  2.  
  3.  
  4. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  5.  
  6.  
  7.  
  8. NNNNaaaammmmeeee
  9.      RWTValMultiMap<K,T,C> - Rogue Wave library class
  10.  
  11. SSSSyyyynnnnooooppppssssiiiissss
  12.               #include <rw/tvmmap.h>
  13.           RWTValMultiMap<K,T,C> m;
  14.  
  15.  
  16.  
  17. SSSSttttaaaannnnddddaaaarrrrdddd CCCC++++++++ LLLLiiiibbbbrrrraaaarrrryyyy DDDDeeeeppppeeeennnnddddeeeennnntttt!!!!
  18.  
  19.  
  20.  
  21.      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp requires the Standard C++ Library.
  22.  
  23.  
  24. DDDDeeeessssccccrrrriiiippppttttiiiioooonnnn
  25.      This class maintains a collection of keys, each with an associated item
  26.      of type TTTT.  Order is determined by the key according to a comparison
  27.      object of type CCCC.  CCCC must induce a total ordering on elements of type KKKK
  28.      via a public member
  29.           bbbboooooooollll ooooppppeeeerrrraaaattttoooorrrr(((())))((((ccccoooonnnnsssstttt KKKK&&&& xxxx,,,, ccccoooonnnnsssstttt KKKK&&&& yyyy)))) ccccoooonnnnsssstttt which returns ttttrrrruuuueeee if
  30.      xxxx and its partner should precede yyyy and its partner within the collection.
  31.      The structure lllleeeessssssss<<<<TTTT>>>> from the C++-standard header file <<<<ffffuuuunnnnccccttttiiiioooonnnnaaaallll>>>> is
  32.      an example.  RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC>>>> may contain multiple keys that compare
  33.      equal to each other.  (RRRRWWWWTTTTVVVVaaaallllMMMMaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC>>>> will not accept a key that
  34.      compares equal to any key already in the collection.)  Equality is based
  35.      on the comparison object and not on the ======== operator.  Given a comparison
  36.      object ccccoooommmmpppp, keys aaaa and bbbb are equal if
  37.           !!!!ccccoooommmmpppp((((aaaa,,,,bbbb)))) &&&&&&&& !!!!ccccoooommmmpppp((((bbbb,,,,aaaa)))).
  38.  
  39. PPPPeeeerrrrssssiiiisssstttteeeennnncccceeee
  40.      Isomorphic.
  41.  
  42. EEEExxxxaaaammmmpppplllleeeessss
  43.      In this example, a map of RRRRWWWWCCCCSSSSttttrrrriiiinnnnggggs and RRRRWWWWDDDDaaaatttteeees is exercised.
  44.  
  45.               //
  46.  
  47.  
  48.  
  49.               // tvmmbday.cpp
  50.           //
  51.           #include <rw/tvmmap.h>
  52.           #include <rw/cstring.h>
  53.           #include <rw/rwdate.h>
  54.           #include <iostream.h>
  55.           #include <function.h>
  56.           main(){
  57.             typedef RWTValMultiMap<RWCString, RWDate, less<RWCString> >
  58.                RWMMap;
  59.             RWMMap birthdays;
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  71.  
  72.  
  73.  
  74.             birthdays.insert("John", RWDate(12, "April",1975));
  75.             birthdays.insert("Ivan", RWDate(2, "Nov", 1980));
  76.             birthdays.insert("Mary", RWDate(22, "Oct", 1987));
  77.             birthdays.insert("Ivan", RWDate(19, "June", 1971));
  78.             birthdays.insert("Sally",RWDate(15, "March",1976));
  79.             birthdays.insert("Ivan",  RWDate(6, "July", 1950));
  80.             // How many "Ivan"s?
  81.             RWMMap::size_type n = birthdays.occurrencesOf("Ivan");
  82.             RWMMap::size_type idx = 0;
  83.             cout << "There are " << n << " Ivans:" << endl;
  84.             RWMMap::iterator iter = birthdays.std().lower_bound("Ivan");
  85.             while (++idx <= n)
  86.               cout << idx << ".  " << (*iter++).second << endl;
  87.             return 0;
  88.           }
  89.           Program Output:
  90.           There are 3 Ivans:
  91.           1.  11/02/80
  92.           2.  06/19/71
  93.  
  94. RRRReeeellllaaaatttteeeedddd CCCCllllaaaasssssssseeeessss
  95.      3.  07/06/50
  96.  
  97.  
  98.      Class RRRRWWWWTTTTVVVVaaaallllMMMMaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC>>>> offers the same interface to a collection that
  99.      will not accept multiple keys that compare equal to each other.
  100.      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiSSSSeeeetttt<<<<TTTT,,,,CCCC>>>> maintains a collection of keys without the associated
  101.      values.  Class mmmmuuuullllttttiiiimmmmaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC,,,,aaaallllllllooooccccaaaattttoooorrrr>>>> is the C++-standard collection
  102.      that serves as the underlying implementation for this collection.
  103.  
  104. PPPPuuuubbbblllliiiicccc TTTTyyyyppppeeeeddddeeeeffffssss
  105.               typedef multimap<K,T,C,allocator>             container_type;
  106.           typedef container_type::iterator              iterator;
  107.           typedef container_type::const_iterator        const_iterator;
  108.           typedef container_type::size_type             size_type;
  109.           typedef pair <const K,T>                       value_type;
  110.           typedef pair <const K,T>&                      reference;
  111.           typedef const pair <const K,T>&                const_reference;
  112.  
  113.  
  114.  
  115. PPPPuuuubbbblllliiiicccc CCCCoooonnnnssssttttrrrruuuuccccttttoooorrrrssss
  116.               RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC>>>>(const C& comp = C());
  117.  
  118.  
  119.      Constructs an empty map with comparator ccccoooommmmpppp.
  120.  
  121.               RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC>>>>(const container_type& m);
  122.  
  123.  
  124.      Constructs a map by copying all elements of mmmm.
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  137.  
  138.  
  139.  
  140.               RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC>>>>(const RWTValMultiMap<K,T,C>& rwm);
  141.  
  142.  
  143.      Copy constructor.
  144.  
  145.               RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp<<<<KKKK,,,,TTTT,,,,CCCC>>>>
  146.           (const value_type* first, const value_type* last,
  147.            const C& comp = C());
  148.  
  149.  
  150.      Constructs a map by copying elements from the array of TTTTs pointed to by
  151.      ffffiiiirrrrsssstttt, up to, but not including, the element pointed to by llllaaaasssstttt.
  152.  
  153.  
  154.  
  155.  
  156.  
  157. PPPPuuuubbbblllliiiicccc MMMMeeeemmmmbbbbeeeerrrr OOOOppppeeeerrrraaaattttoooorrrrssss
  158.               RWTValMultiMap<K,T,C>&
  159.           ooooppppeeeerrrraaaattttoooorrrr====(const RWTValMultiMap<K,T,C>& m);
  160.           RWTValMultiMap<K,T,C>&
  161.           ooooppppeeeerrrraaaattttoooorrrr====(const container_type& m) const;
  162.  
  163.  
  164.      Destroys all elements of self and replaces them by copying all
  165.      associations from mmmm....
  166.  
  167.               bool
  168.           ooooppppeeeerrrraaaattttoooorrrr<<<<(const RWTValMultiMap<K,T,C>& m);
  169.           bool
  170.           ooooppppeeeerrrraaaattttoooorrrr<<<<(const container_type& m) const;
  171.  
  172.  
  173.      Returns ttttrrrruuuueeee if self compares lexicographically less than mmmm, otherwise
  174.      returns ffffaaaallllsssseeee.  Assumes that type KKKK has well-defined less-than semantics
  175.      (TTTT::::::::ooooppppeeeerrrraaaattttoooorrrr<<<<((((ccccoooonnnnsssstttt KKKK&&&&)))) or equivalent).
  176.  
  177.               bool
  178.           ooooppppeeeerrrraaaattttoooorrrr========(const RWTValMultiMap<K,T,C>& m) const;
  179.           bool
  180.           ooooppppeeeerrrraaaattttoooorrrr========(const container_type& m) const;
  181.  
  182.  
  183.      Returns ttttrrrruuuueeee if self compares equal to mmmm, otherwise returns ffffaaaallllsssseeee.  Two
  184.      collections are equal if both have the same number of entries, and
  185.      iterating through both collections produces, in turn, individual pairs
  186.      that compare equal to each other.
  187.  
  188. PPPPuuuubbbblllliiiicccc MMMMeeeemmmmbbbbeeeerrrr FFFFuuuunnnnccccttttiiiioooonnnnssss
  189.               void
  190.           aaaappppppppllllyyyy(void (*fn)(const K&, T&, void*),void* d);
  191.           void
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  203.  
  204.  
  205.  
  206.           aaaappppppppllllyyyy(void (*fn)(const K&, const T&, void*),void* d) const;
  207.  
  208.  
  209.      Applies the user-defined function pointed to by ffffnnnn to every association
  210.      in the collection.  This function must have one of the prototypes:
  211.  
  212.  
  213.  
  214.  
  215.  
  216.                  void yourfun(const K& key, T& a, void* d);
  217.              void yourfun(const K& key, const T& a,void* d);
  218.  
  219.  
  220.      Client data may be passed through parameter dddd.
  221.  
  222.               void
  223.           aaaappppppppllllyyyyTTTTooooKKKKeeeeyyyyAAAAnnnnddddVVVVaaaalllluuuueeee(void (*fn)(const K&, T&, void*),void* d);
  224.           void
  225.           aaaappppppppllllyyyyTTTTooooKKKKeeeeyyyyAAAAnnnnddddVVVVaaaalllluuuueeee
  226.           (void (*fn)(const K&, const T&, void*),void* d) const;
  227.  
  228.  
  229.      This is a deprecated version of the aaaappppppppllllyyyy member above.  It behaves
  230.      exactly the same as aaaappppppppllllyyyy....
  231.  
  232.               iterator
  233.           bbbbeeeeggggiiiinnnn();
  234.           const_iterator
  235.           bbbbeeeeggggiiiinnnn() const;
  236.  
  237.  
  238.      Returns an iterator positioned at the first pair in self.
  239.  
  240.               void
  241.           cccclllleeeeaaaarrrr();
  242.  
  243.  
  244.      Clears the collection by removing all items from self.  Each key and its
  245.      associated item will have its destructor called.
  246.  
  247.               bool
  248.           ccccoooonnnnttttaaaaiiiinnnnssss(const K& key) const;
  249.  
  250.  
  251.      Returns ttttrrrruuuueeee if there exists a key jjjj in self that compares equal to kkkkeeeeyyyy,
  252.      otherwise returns ffffaaaallllsssseeee.
  253.  
  254.               bool
  255.           ccccoooonnnnttttaaaaiiiinnnnssss
  256.           (bool (*fn)(const_reference,void*),void* d) const;
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  269.  
  270.  
  271.  
  272.      Returns ttttrrrruuuueeee if there exists an association a in self such that the
  273.      expression ((((((((****ffffnnnn))))((((aaaa,,,,dddd)))))))) is ttttrrrruuuueeee, otherwise returns ffffaaaallllsssseeee.  ffffnnnn points to a
  274.      user-defined tester function which must have prototype:
  275.  
  276.  
  277.  
  278.  
  279.  
  280.                  bool yourTester(const_reference a, void* d);
  281.  
  282.  
  283.      Client data may be passed through parameter dddd.
  284.  
  285.               iterator
  286.           eeeennnndddd();
  287.           const_iterator
  288.           eeeennnndddd() const;
  289.  
  290.  
  291.      Returns an iterator positioned "just past" the last association in self.
  292.  
  293.               size_type
  294.           eeeennnnttttrrrriiiieeeessss() const;
  295.  
  296.  
  297.      Returns the number of associations in self.
  298.  
  299.               bool
  300.           ffffiiiinnnndddd(const K& key, Key& r) const;
  301.  
  302.  
  303.      If there exists a key jjjj in self that compares equal to kkkkeeeeyyyy, assigns jjjj to
  304.      rrrr and returns ttttrrrruuuueeee.  Otherwise, returns ffffaaaallllsssseeee and leaves the value of rrrr
  305.      unchanged.
  306.  
  307.               bool
  308.           ffffiiiinnnndddd(bool (*fn)(const_reference,void*),void* d,
  309.                pair<K,T>& r) const;
  310.  
  311.  
  312.      If there exists an association aaaa in self such that the expression
  313.      ((((((((****ffffnnnn))))((((aaaa,,,,dddd)))))))) is ttttrrrruuuueeee, assigns aaaa to rrrr and returns ttttrrrruuuueeee.  Otherwise,
  314.      returns ffffaaaallllsssseeee and leaves the value of kkkk unchanged.  ffffnnnn points to a user-
  315.      defined tester function which must have prototype:
  316.  
  317.  
  318.  
  319.  
  320.  
  321.                  bool yourTester(const_reference a, void* d);
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  335.  
  336.  
  337.  
  338.      Client data may be passed through parameter dddd.
  339.  
  340.               bool
  341.           ffffiiiinnnnddddVVVVaaaalllluuuueeee(const K& key, T& r) const;
  342.  
  343.  
  344.      If there exists a key jjjj in self that compares equal to kkkkeeeeyyyy, assigns the
  345.      item associated with jjjj to rrrr and returns ttttrrrruuuueeee.  Otherwise, returns ffffaaaallllsssseeee
  346.      and leaves the value of rrrr unchanged.
  347.  
  348.               bool
  349.           ffffiiiinnnnddddKKKKeeeeyyyyVVVVaaaalllluuuueeee(const K& key, K& kr, T& tr) const;
  350.  
  351.  
  352.      If there exists a key jjjj in self that compares equal to kkkkeeeeyyyy, assigns jjjj to
  353.      kkkkrrrr, assigns the item associated with jjjj to trrrr,,,, and returns ttttrrrruuuueeee.
  354.      Otherwise, returns ffffaaaallllsssseeee and leaves the values of kkkkrrrr and ttttrrrr unchanged.
  355.  
  356.               bool
  357.           iiiinnnnsssseeeerrrrtttt(const K& key, const T& a);
  358.  
  359.  
  360.      Adds kkkkeeeeyyyy with associated item aaaa to the collection.  Returns ttttrrrruuuueeee.
  361.  
  362.               bool
  363.           iiiinnnnsssseeeerrrrttttKKKKeeeeyyyyAAAAnnnnddddVVVVaaaalllluuuueeee(const K& key, const T& a);
  364.  
  365.  
  366.      This is a deprecated version of the iiiinnnnsssseeeerrrrtttt member above.  It behaves
  367.      exactly the same as iiiinnnnsssseeeerrrrtttt....
  368.  
  369.               bool
  370.           iiiissssEEEEmmmmppppttttyyyy() const;
  371.  
  372.  
  373.      Returns ttttrrrruuuueeee if there are no items in the collection, ffffaaaallllsssseeee otherwise.
  374.  
  375.               size_type
  376.           ooooccccccccuuuurrrrrrrreeeennnncccceeeessssOOOOffff(const K& key) const;
  377.  
  378.  
  379.      Returns the number of keys jjjj in self that compare equal to kkkkeeeeyyyy.
  380.  
  381.               size_type
  382.           ooooccccccccuuuurrrrrrrreeeennnncccceeeessssOOOOffff(bool (*fn)(const_reference,void*),
  383.                         void* d) const;
  384.  
  385.  
  386.      Returns the number of associations aaaa in self such that the
  387.      expression((((((((****ffffnnnn))))((((aaaa,,,,dddd)))))))) is ttttrrrruuuueeee.  ffffnnnn points to a user-defined tester
  388.      function which must have prototype:
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.                  bool yourTester(const_reference a, void* d);
  409.  
  410.  
  411.      Client data may be passed through parameter dddd.
  412.  
  413.               bool
  414.           rrrreeeemmmmoooovvvveeee(const K& key);
  415.  
  416.  
  417.      Removes the first association with key jjjj in self where j compares equal
  418.      to kkkkeeeeyyyy and returns ttttrrrruuuueeee.  Returns ffffaaaallllsssseeee if there is no such association.
  419.  
  420.               bool
  421.           rrrreeeemmmmoooovvvveeee(bool (*fn)(const_reference,void*), void* d);
  422.  
  423.  
  424.      Removes the first association aaaa in self such that the expression
  425.      ((((((((****ffffnnnn))))((((aaaa,,,,dddd)))))))) is ttttrrrruuuueeee and returns ttttrrrruuuueeee.  Returns ffffaaaallllsssseeee if there is no such
  426.      element.  ffffnnnn points to a user-defined tester function which must have
  427.      prototype:
  428.  
  429.  
  430.  
  431.  
  432.  
  433.                  bool yourTester(const_reference a, void* d);
  434.  
  435.  
  436.      Client data may be passed through parameter dddd.
  437.  
  438.               size_type
  439.           rrrreeeemmmmoooovvvveeeeAAAAllllllll(const K& key);
  440.  
  441.  
  442.      Removes all associations in self that have a key jjjj that compares equal to
  443.      kkkkeeeeyyyy.  Returns the number of items removed.
  444.  
  445.               size_type
  446.           rrrreeeemmmmoooovvvveeeeAAAAllllllll(bool (*fn)(const_reference,void*), void* d);
  447.  
  448.  
  449.      Removes all associations aaaa in self such that the expression
  450.      ((((((((****ffffnnnn))))((((aaaa,,,,dddd))))))))is ttttrrrruuuueeee.  Returns the number of items removed.  ffffnnnn points to
  451.      a user-defined tester function which must have prototype:
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))                                      RRRRWWWWTTTTVVVVaaaallllMMMMuuuullllttttiiiiMMMMaaaapppp((((3333CCCC++++++++))))
  467.  
  468.  
  469.  
  470.                  bool yourTester(const_reference a, void* d);
  471.  
  472.  
  473.      Client data may be passed through parameter dddd.
  474.  
  475.               multimap<K,T,C,allocator>&
  476.           ssssttttdddd();
  477.           const multimap<K,T,C,allocator>&
  478.           ssssttttdddd() const;
  479.  
  480.  
  481.      Returns a reference to the underlying C++-standard collection that serves
  482.      as the implementation for self.  This reference may be used freely,
  483.      providing access to the C++-standard interface as well as
  484.      interoperability with other software components that make use of the
  485.      C++-standard collections.
  486.  
  487. RRRReeeellllaaaatttteeeedddd GGGGlllloooobbbbaaaallll OOOOppppeeeerrrraaaattttoooorrrrssss
  488.               RWvostream&
  489.           ooooppppeeeerrrraaaattttoooorrrr<<<<<<<<(RWvostream& strm,
  490.                  const RWTValMultiMap<K,T,C>& coll);
  491.           RWFile&
  492.           ooooppppeeeerrrraaaattttoooorrrr<<<<<<<<(RWFile& strm, const RWTValMultiMap<K,T,C>& coll);
  493.  
  494.  
  495.      Saves the collection ccccoooollllllll onto the output stream ssssttttrrrrmmmm, or a reference to
  496.      it if it has already been saved.
  497.  
  498.               RWvistream&
  499.           ooooppppeeeerrrraaaattttoooorrrr>>>>>>>>(RWvistream& strm, RWTValMultiMap<K,T,C>& coll);
  500.           RWFile&
  501.           ooooppppeeeerrrraaaattttoooorrrr>>>>>>>>(RWFile& strm, RWTValMultiMap<K,T,C>& coll);
  502.  
  503.  
  504.      Restores the contents of the collection ccccoooollllllll from the input stream ssssttttrrrrmmmm.
  505.  
  506.               RWvistream&
  507.           ooooppppeeeerrrraaaattttoooorrrr>>>>>>>>(RWvistream& strm, RWTValMultiMap<K,T,C>*& p);
  508.           RWFile&
  509.           ooooppppeeeerrrraaaattttoooorrrr>>>>>>>>(RWFile& strm, RWTValMultiMap<K,T,C>*& p);
  510.  
  511.  
  512.      Looks at the next object on the input stream ssssttttrrrrmmmm and either creates a
  513.      new collection off the heap and sets pppp to point to it, or sets pppp to point
  514.      to a previously read instance.  If a collection is created off the heap,
  515.      then you are responsible for deleting it.
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.